package com.cn.wanxi.servlet;

import com.cn.wanxi.model.CompanyModel;
import com.cn.wanxi.model.NavModel;
import com.cn.wanxi.model.NewsModel;
import com.cn.wanxi.model.TitleModel;
//import com.cn.wanxi.service.CompanyService;
import com.cn.wanxi.service.ICompanyService;
//import com.cn.wanxi.service.NavService;
//import com.cn.wanxi.service.NewsService;
//import com.cn.wanxi.service.TitleService;
import com.cn.wanxi.service.impl.CompanyServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

@WebServlet("/home")
public class HomeServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        TitleService titleService = new TitleService();
//        TitleModel titleModel = titleService.getTitleModel();
//        req.setAttribute("titleModel", titleModel);
//        CompanyService companyService = new CompanyService();

//        得到公司信息
        ICompanyService iCompanyService=new CompanyServiceImpl();
        CompanyModel companyModel = iCompanyService.getCompanyModel();
        req.setAttribute("companyModel", companyModel);//将数据存放在四大作用域里面的request
/**
 * 1.servlet --注解（地址）--方法（get）
 * 2.返回页面 req.getRequestDispatcher("/jsp/home.jsp").forward(req, resp);
 * 3.将数据封装到req里面req.setAttribute("companyModel", companyModel)
 * 4.companyModel数据来源？服务逻辑层
 * 5.CompanyService companyService = new CompanyService();
 * 6.服务逻辑层里面封装数据。分层（更好的将代码分开，各司其职）
 * 7.首先写了一个封装的方法，---创建一个空的对象实例化CompanyModel companyModel = new CompanyModel()
 * 8.需要对companyModel的所有属性进行赋值，companyModel.setPhone
 * 9.数据来源？数据层dao   CompanyDao companyDao = new CompanyDao();companyDao.getLogo()
 * 10.前端页面:${}，括号里面的值，应该是req里面的key，
 * 11.如果是model，对象.属性
 * 12.如果是集合 <c:forEach items="${navModelList}" var="navModel">
 *     item就是后台的key，var是集合里面的对象
 *     <div>
 *         <a href="${navModel.href}">${navModel.title}</a>
 *    </div>
 *    所以，里面循环的语句，值也是通过${}来取值。
 *
// */
//        NavService navService = new NavService();
////        NavModel navModel=navService.getNavModel();
//        List<NavModel> navModelList = navService.getNavModelList();
//        req.setAttribute("navModelList", navModelList);//思考，nav到底属于什么类型？
//
//
//        NewsService newsService = new NewsService();
//        List<NewsModel> newsModelList = newsService.getNewsModelList();
//        req.setAttribute("newsModelList", newsModelList);
        req.getRequestDispatcher("/jsp/home.jsp").forward(req, resp);//页面转发，转发数据
    }

    /**
     * 将页面的标题提取出来：
     * 1.新建servlet层  之和页面相关
     *  1）写注解 前台访问后台的地址 home
     *  2）返回那个页面 req.getRequestDispatcher("/jsp/home.jsp").forward(req, resp)
     *  3）同时需要将数据传递给前端
     *      这里需要的数据是一个对象titleModel，而不是单独的一个属性，因为我们需要一次性传递多个数据
     *      req.setAttribute("titleModel", titleModel);
     *      setAttribute（key，value） key代表前端要访问的地址 ，value就是后端传递给前端的值
     *  4）value值应该从服务层来取得
     *      TitleService titleService = new TitleService();//对服务层进行实例化
     *      TitleModel titleModel = titleService.getTitleModel();调用服务层的方法
     * 2 service服务逻辑层
     *      1）主要封装数据层的数据
     *      TitleDao titleDao = new TitleDao();主要目的就是为了得到数据
     *      2）封装
     *      TitleModel titleModel = new TitleModel();
     *      titleModel.setNewsTitle(titleDao.getNewsTitle());
     *      titleModel.setProducTitle(titleDao.getProducTitle());
     *      3)返回对象
     * 3.dao 数据访问层
     *      主要目的就是数据
     */
    /**
     * 1.数组，定义方式
     * 2.集合：
     * 3.jstl 标签和el表达式     c:forEach   c:if
     * 4.类的加载顺序
     *
     */
}
